/**
 * <strong>Title : BOMService.java<br>
 * </strong> <strong>Package : cn.b.sky.mes.cm.service<br>
 * </strong> <strong>Description : </strong>@类注释说明写在此处@<br>
 * <strong>Create on : 2016年1月18日 上午11:43:48<br>
 * </strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 *          <strong>修改历史:</strong><br>
 *          修改人 | 修改日期 | 修改描述<br>
 *          -------------------------------------------<br>
 * <br>
 * <br>
 */
package cn.b.sky.mes.cm.service;

import java.util.List;

import cn.b.sky.mes.cm.model.BOM;
import cn.b.sky.mes.cm.model.BOMComponent;
import cn.b.sky.mes.cm.model.Material;
import cn.b.sky.mes.cm.model.condition.BOMCondition;
import cn.b.sky.common.model.BatchJobReport;

/**
 * <strong>Title : BOMService.java<br>
 * </strong> <strong>Package : cn.b.sky.mes.cm.service<br>
 * </strong> <strong>Description : </strong>BOM业务接口<br>
 * <strong>Create on : 2016年1月18日 上午11:43:48<br>
 * </strong>
 * <p>
 * 
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 *          <strong>修改历史:</strong><br>
 *          修改人 | 修改日期 | 修改描述<br>
 *          -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface BOMService {

  List<BOM> selectBOMListByCondition(BOMCondition condition);

  int selectBOMCountByCondition(BOMCondition condition);

  void insertBOM(BOM bom);

  boolean updateBOM(BOM bom);

  BatchJobReport deleteBOM(String bomCode, String siteCode);

  BOM getBOMAndComponents(String bomCode, String siteCode);

  List<Material> selectMaterialByBomCode(String bomCode, String siteCode);

  /**
   * <strong>Title : selectBOMByComponentCode<br>
   * </strong> <strong>Description : </strong>查询此物料的bom所引用的所有物料组件<br>
   * <strong>Create on : 2016年1月19日 下午2:49:15<br>
   * </strong>
   * <p>
   * 
   * @param materialCode
   * @param siteCode
   * @return List<BOM>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Material> selectMaterialByComponentCode(String materialCode, String siteCode);

  /**
   * 
   * <strong>Title : recurseMaterials<br>
   * </strong> <strong>Description : </strong>递归查询被挂在该物料清单下对应的物料<br>
   * <strong>Create on : 2016年1月19日 下午3:18:59<br>
   * </strong>
   * <p>
   * 
   * @param materialCodes
   * @param list
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void recurseMaterials(List<String> materialCodes, List<Material> list);

  /**
   * <strong>Title : getBOM<br>
   * </strong> <strong>Description : </strong>取BOM实体<br>
   * <strong>Create on : 2016年1月18日 下午1:29:05<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   * @return BOM
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  BOM getBOM(String bomCode, String siteCode);

  /**
   * <strong>Title : getBOMComponents<br>
   * </strong> <strong>Description : </strong>根据bomCode取下一级物料清单<br>
   * <strong>Create on : 2016年1月19日 下午5:14:54<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   * @return BOM
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOMComponent> getBOMComponents(String bomCode, String siteCode);

  /**
   * 
   * <strong>Title : selectComponentsWithItsBomCode<br>
   * </strong> <strong>Description :
   * </strong>根据bomCode取组件编号，组件描述及该组件下对应bomCode（如果存在）<br>
   * <strong>Create on : 2016年1月20日 上午9:47:34<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   * @return List<BOMComponent>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOMComponent> selectComponentsAndItsBomCode(String bomCode, String siteCode);

  /**
   * 
   * <strong>Title : getBOMComponentByBom<br>
   * </strong> <strong>Description : </strong>获取bom的组件<br>
   * <strong>Create on : 2016-1-20 下午1:16:53<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param bomCode
   * @return List<BOMComponent>
   * @throws
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOMComponent> getBOMComponentByBom(String siteCode, String bomCode);

  /**
   * 
   * <strong>Title : selectBOMSuggests<br></strong>
   * <strong>Description : </strong>bom搜索建议<br> 
   * <strong>Create on : 2016年4月11日 下午7:12:31<br></strong>
   * <p>
   * @param condition
   * @return
   * List<BOM>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOM> selectBOMSuggests(BOMCondition condition);

  /**
   * 
   * <strong>Title : selectParentsComponents<br></strong>
   * <strong>Description : </strong>查询父组件清单<br> 
   * <strong>Create on : 2016年5月16日 上午9:44:23<br></strong>
   * <p>
   * @param componentCode
   * @param siteCode
   * @return
   * List<BOMComponent>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOMComponent> selectParentsComponents(String componentCode, String siteCode);

}
